<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>User Defined Function</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/User_Defined_Function"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-User_Defined_Function rootpage-User_Defined_Function skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">User Defined Function</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Eine <b>benutzerdefinierte Funktion</b> (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic"><b>user-defined function</b></span>, Abkürzung <b>UDF</b>) in einer Programmierumgebung bezeichnet eine <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktion</a>, die der Anwender selbst erstellen und in seine Projekte einbinden kann. Sie erfüllt eine Aufgabe wie ein <a href="Makro" title="Makro">Makro</a>, wird jedoch über einen Funktionsaufruf realisiert. Benutzerdefinierte Funktionen sind in allgemeinen <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> wie <a href="Visual_Objects" title="Visual Objects">Visual Objects</a>, <a href="Skriptsprache" title="Skriptsprache">Skriptsprachen</a> wie <a href="PHP" title="PHP">PHP</a>, spezieller Makrosoftware wie <a href="AutoIt" title="AutoIt">AutoIt</a> und in <a href="Datenbank" title="Datenbank">Datenbanksprachen</a> wie <a href="SQL" title="SQL">SQL</a> und <a href="Firebird_(Datenbank)" title="Firebird (Datenbank)">Firebird</a> verfügbar.
</p><p>Die <a href="Syntax" title="Syntax">Syntax</a> einer benutzerdefinierten Funktion muss der Syntax der zugrundeliegenden <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> entsprechen, wobei vordefinierte Standardfunktionen und andere benutzerdefinierte Funktionen in der Definition verwendet werden können. Eine benutzerdefinierte Funktion muss genau einen Rückgabewert liefern.
</p><p>Im Gegensatz zu einer <a href="Gespeicherte_Prozedur" title="Gespeicherte Prozedur">gespeicherten Prozedur</a> kann eine benutzerdefinierte Funktion nicht als <a href="Computerprogramm" title="Computerprogramm">Programm</a> gestartet werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiele">Beispiele</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Skalare_benutzerdefinierte_Funktion_in_SQL">Skalare benutzerdefinierte Funktion in SQL</h3></div><p>
Der folgenden skalaren benutzerdefinierten Funktion wird der <a href="Fremdschl%C3%BCssel" class="mw-redirect" title="Fremdschlüssel">Fremdschlüssel</a> <i>@PersNr</i> der Person vom <a href="Datentyp" title="Datentyp">Datentyp</a> <a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a> übergeben. Die Funktion gibt die kleinste Vorlesungsnummer für diese Person zurück.</p><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">GibMinVorlesungsnummer</span><span class="p">(</span><span class="o">@</span><span class="n">PersNr</span><span class="w"> </span><span class="nb">INT</span><span class="p">)</span>
<span class="k">RETURNS</span><span class="w"> </span><span class="nb">INT</span>
<span class="k">AS</span>
<span class="k">RETURN</span>
<span class="k">AS</span>
<span class="p">(</span>
<span class="w"> </span><span class="k">RETURN</span>
<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">MIN</span><span class="p">(</span><span class="n">VorlNr</span><span class="p">)</span>
<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Vorlesung</span>
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">PersNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@</span><span class="n">PersNr</span>
<span class="p">);</span>
</pre></div><p>
Nachdem diese benutzerdefinierte Funktion in der <a href="Datenbank" title="Datenbank">Datenbank</a> gespeichert ist, kann sie innerhalb einer <a href="SQL" title="SQL">SQL</a>-Abfrage verwendet werden. Die Abfrage</p><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">Professor</span><span class="p">.</span><span class="n">PersNr</span><span class="p">,</span><span class="w"> </span><span class="n">Professor</span><span class="p">.</span><span class="n">Name</span><span class="p">,</span><span class="w"> </span><span class="n">GibMinVorlesungsnummer</span><span class="p">(</span><span class="n">PersNr</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">MinVorlNr</span><span class="p">,</span>
<span class="w"> </span><span class="p">(</span><span class="k">SELECT</span><span class="w"> </span><span class="n">Titel</span>
<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Vorlesung</span>
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">VorlNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GibMinVorlesungsnummer</span><span class="p">(</span><span class="n">PersNr</span><span class="p">)</span>
<span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">Titel</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Professor</span><span class="p">;</span>
</pre></div><p>könnte folgende <a href="Datenbanktabelle" title="Datenbanktabelle">Tabelle</a> als Ergebnis zurückgeben:
</p><table class="wikitable">
<tbody><tr>
<th>PersNr
</th>
<th>Name
</th>
<th>MinVorlNr
</th>
<th>Titel
</th></tr>
<tr>
<td>12
</td>
<td>Wirth
</td>
<td>1000
</td>
<td>Softwareentwicklung 1
</td></tr>
<tr>
<td>15
</td>
<td>Tesla
</td>
<td>1001
</td>
<td>Datenbanken
</td></tr>
<tr>
<td>20
</td>
<td>Urlauber
</td>
<td>1200
</td>
<td>Netzwerke 1
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="External_Table_Function_(„externe_Tabellenfunktion“)_in_SQL"><span id="External_Table_Function_.28.E2.80.9Eexterne_Tabellenfunktion.E2.80.9C.29_in_SQL"></span>External Table Function („externe Tabellenfunktion“) in SQL</h3></div>
<p>In dieser Variante wird genau eine unbenannte <a href="SQL" title="SQL">SQL</a>-Tabelle als Rückgabewert geliefert. Sie kann innerhalb einer SQL-Anweisung überall dort stehen, wo auch eine SQL-Tabelle stehen kann. Auf SQL-Ebene wird ein Kontrolleintrag definiert, der auf ein externes Programm verweist. Das <a href="Datenbanksystem" class="mw-redirect" title="Datenbanksystem">Datenbanksystem</a> unterstützt in der Regel mehrere <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a>, in denen das <a href="Computerprogramm" title="Computerprogramm">Programm</a> geschrieben werden kann.
</p><p>
Die folgende benutzerdefinierte Funktion in <a href="SQL" title="SQL">SQL</a> hat zwei <a href="Parameter_(Informatik)" title="Parameter (Informatik)">Parameter</a> <i>@VorlNr</i>, <i>@PersNr</i> vom <a href="Datentyp" title="Datentyp">Datentyp</a> <a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a>:</p><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">GibVorlesungen</span><span class="p">(</span><span class="o">@</span><span class="n">VorlNr</span><span class="w"> </span><span class="nb">INT</span><span class="p">,</span><span class="w"> </span><span class="o">@</span><span class="n">PersNr</span><span class="w"> </span><span class="nb">INT</span><span class="p">)</span>
<span class="k">RETURNS</span><span class="w"> </span><span class="k">TABLE</span>
<span class="k">AS</span>
<span class="k">RETURN</span>
<span class="k">AS</span>
<span class="p">(</span>
<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">Vorlesung</span><span class="p">.</span><span class="n">VorlNr</span><span class="p">,</span><span class="w"> </span><span class="n">Vorlesung</span><span class="p">.</span><span class="n">Titel</span><span class="p">,</span><span class="w"> </span><span class="n">Professor</span><span class="p">.</span><span class="n">PersNr</span><span class="p">,</span><span class="w"> </span><span class="n">Professor</span><span class="p">.</span><span class="n">Name</span>
<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">Professor</span><span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Vorlesung</span>
<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">Professor</span><span class="p">.</span><span class="n">PersNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Vorlesung</span><span class="p">.</span><span class="n">PersNr</span>
<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">VorlNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@</span><span class="n">VorlNr</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">PersNr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@</span><span class="n">PersNr</span>
<span class="p">);</span>
</pre></div><p>Die Abfrage</p><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">GibVorlesungen</span><span class="p">(</span><span class="mi">1001</span><span class="p">,</span><span class="w"> </span><span class="mi">15</span><span class="p">);</span>
</pre></div><p>könnte folgendes Ergebnis zurückgeben (siehe <a href="SQL#Sicht" title="SQL">SQL - Sicht</a>):
</p><table class="wikitable">
<tbody><tr>
<th>VorlNr
</th>
<th>Titel
</th>
<th>PersNr
</th>
<th>Name
</th></tr>
<tr>
<td>1001
</td>
<td>Datenbanken
</td>
<td>15
</td>
<td>Urlauber
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>Microsoft Docs: <a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine">Create User-defined Functions (Database Engine)</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-12-28" href="https://de.wikipedia.org/wiki/?title=User_Defined_Function&oldid=240588012">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>